/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ar.com.gestion.MenuPrincipal;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.util.LinkedList;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import ar.com.gestion.dominio.Producto;
import ar.com.gestion.listeners.BotonRefrescarTablaListener;
import ar.com.gestion.listeners.MenuPrincipalVenderListener;
import ar.com.gestion.tabla.ControlTabla;
import ar.com.gestion.tabla.ModeloTabla;
import ar.com.gestion.ventas.ModuloVentas;

/**
 * 
 * @author martinLequerica
 */
public class MenuPrincipal extends JFrame {

	private JMenuBar BarraMenu;
	private JMenu menu;
	private JMenuItem item;
	private String[] etiquetas = { "En Venta", "Precio Total", "Profesor",
			"Nombre Apunte", "Cod", "Id" };
	private JButton vender, refresh, buscar;
	private JTextField profesor, nombreApunte, carrera, id, cod, precioTotal;
	private JList lista;
	private ControlTabla control ;
	private LinkedList<Producto> listaAVender;
	private DefaultListModel<String> defaultListModel;
	private JTable tabla;
	private ModeloTabla modelo;
	private PopMenu popMenu;
	private JScrollPane scroll;
	private PopUpMenuLista popLista;
	private JPanel panelUsuario;
	private ModuloVentas moduloVentas;

	public MenuPrincipal() {
	}

	public void MenuPrincipalinicio() {
		lista = moduloVentas.getLista();
		tabla = moduloVentas.getTabla();
		listaAVender = moduloVentas.getListaAVender();
		control = moduloVentas.getControlTabla();
		precioTotal = moduloVentas.getPrecioTotal();
		precioTotal.setText("0");
		
			
			
		// inicializo variables
		vender = new JButton("Vender");
		refresh = new JButton("Refresh");
		buscar = new JButton("Buscar");

		// jtextfield
		profesor = new JTextField();
		nombreApunte = new JTextField();
		carrera = new JTextField();
		cod = new JTextField();
		id = new JTextField();
//		precioTotal = new JTextField();

		// lista

		// lista= new JList();

		defaultListModel = new DefaultListModel();
		lista.setModel(defaultListModel);
		JScrollPane pane = new JScrollPane(lista);

//		listaAVender = new LinkedList<Producto>();

		// fin inicializar variables

		// frame pantalla completa
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		setSize(d);

		BarraMenu = new JMenuBar();
		menu = new JMenu("menu");
		setJMenuBar(BarraMenu);

		setLayout(new GridBagLayout());

		// Creo layout
		GridBagConstraints constraints = new GridBagConstraints();

		// panel en blanco

		JPanel panel = new JPanel();
		panel.setLayout(new FlowLayout());

		constraints.gridx = 0;// en que columna empieza
		constraints.gridy = 0;// en que fila empieza
		constraints.gridwidth = 1;// cantidad de columnas que ocupa
		constraints.gridheight = 4; // cantidad de filas que ocupa
		// La tabla debe estirarse para todos lados ponemos fil both
		constraints.fill = GridBagConstraints.BOTH;
		constraints.weightx = 0.0; // la fila debe estirarse poner 0 si no
		constraints.weighty = 0.0; // la columna debe estirarse poner 0 si no
		this.getContentPane().add(panel, constraints);

		// creo la tabla

		// Crea el modelo
		modelo = new ModeloTabla();

		// Crea el control, pasándole el modelo
//		ControlTabla control = new ControlTabla(modelo);
		control.setModelo(modelo);

		// Crea la vista, pasándole el control
		scroll = new JScrollPane();
		// tabla = new JTable(modelo);
		tabla.setModel(modelo);
		scroll.setViewportView(tabla);
		scroll.setColumnHeaderView(tabla.getTableHeader());

		// restricciones tabla
		constraints.gridx = 0;// en que columna empieza
		constraints.gridy = 6;// en que fila empieza
		constraints.gridwidth = 5;// cantidad de columnas que ocupa
		constraints.gridheight = 1; // cantidad de filas que ocupa
		// La tabla debe estirarse para todos lados ponemos fil both
		constraints.fill = GridBagConstraints.BOTH;
		constraints.weightx = 1.0; // la fila debe estirarse poner 0 si no
		constraints.weighty = 1.0; // la columna debe estirarse poner 0 si no

		this.getContentPane().add(scroll, constraints);

		popMenu = new PopMenu();

		tabla.setComponentPopupMenu(popMenu);

		// label en venta
		constraints.gridx = 1;// en que columna empieza
		constraints.anchor = GridBagConstraints.SOUTH;
		constraints.gridy = 0;// en que fila empieza
		constraints.gridwidth = 1;// cantidad de columnas que ocupa
		constraints.gridheight = 1; // cantidad de filas que ocupa
		constraints.fill = 0;
		constraints.weightx = 0.0; // la fila debe estirarse poner 0 si no
		constraints.weighty = 0.0; // la columna debe estirarse poner 0 si no
		this.getContentPane().add(new JLabel(etiquetas[0]), constraints);
		constraints.anchor = GridBagConstraints.CENTER;
		// aniado la lista

		// aniado popup a la lista
		popLista = new PopUpMenuLista();
		lista.setComponentPopupMenu(popLista);

		constraints.gridx = 1;// en que columna empieza
		constraints.gridy = 1;// en que fila empieza
		constraints.gridwidth = 1;// cantidad de columnas que ocupa
		constraints.gridheight = 3; // cantidad de filas que ocupa
		constraints.fill = GridBagConstraints.BOTH;
		constraints.weightx = 0.0; // la fila debe estirarse poner 0 si no
		constraints.weighty = 1.0; // la columna debe estirarse poner 0 si no

		this.getContentPane().add(pane, constraints);

		// ventas

		JPanel ventas = new JPanel();
		ventas.setLayout(new GridLayout(4, 1));
		ventas.add(new JLabel(etiquetas[1]));
		ventas.add(precioTotal);

		ventas.add(vender);
		ventas.add(refresh);
		
		vender.addActionListener(new MenuPrincipalVenderListener());

		constraints.gridx = 3;// en que columna empieza
		constraints.gridy = 3;// en que fila empieza
		constraints.gridwidth = 1;// cantidad de columnas que ocupa
		constraints.gridheight = 1; // cantidad de filas que ocupa
		constraints.fill = 0;
		constraints.weightx = 0.0; // la fila debe estirarse poner 0 si no
		constraints.weighty = 0.0; // la columna debe estirarse poner 0 si no
		constraints.anchor = GridBagConstraints.SOUTH;
		this.getContentPane().add(ventas, constraints);

		// busqueda
		JPanel busqueda = new JPanel();
		busqueda.setLayout(new GridLayout(2, 5));
		busqueda.add(new JLabel(etiquetas[5]));
		busqueda.add(new JLabel(etiquetas[4]));
		busqueda.add(new JLabel(etiquetas[2]));
		busqueda.add(new JLabel(etiquetas[3]));
		busqueda.add(new JLabel(""));
		busqueda.add(id);
		busqueda.add(cod);
		busqueda.add(profesor);
		busqueda.add(nombreApunte);
		busqueda.add(buscar);

		constraints.gridx = 0;// en que columna empieza
		constraints.gridy = 4;// en que fila empieza
		constraints.gridwidth = 5;// cantidad de columnas que ocupa
		constraints.gridheight = 2; // cantidad de filas que ocupa
		constraints.fill = GridBagConstraints.BOTH;
		constraints.weightx = 0.0; // la fila debe estirarse poner 0 si no
		constraints.weighty = 0.0; // la columna debe estirarse poner 0 si no
		this.getContentPane().add(busqueda, constraints);

		// otro panel
		panelUsuario = new JPanel();

		constraints.gridx = 4;// en que columna empieza
		constraints.gridy = 3;// en que fila empieza
		constraints.gridwidth = 1;// cantidad de columnas que ocupa
		constraints.gridheight = 1; // cantidad de filas que ocupa
		// La tabla debe estirarse para todos lados ponemos fil both
		constraints.fill = GridBagConstraints.BOTH;
		constraints.weightx = 0.0; // la fila debe estirarse poner 0 si no
		constraints.weighty = 0.0; // la columna debe estirarse poner 0 si no
		this.getContentPane().add(panelUsuario, constraints);

		// fin layout
		this.setJMenuBar(BarraMenu);

		//listeners
		refresh.addActionListener(new BotonRefrescarTablaListener());
		
		
		// setVisible(true);

		setDefaultCloseOperation(EXIT_ON_CLOSE);

	}

	public JMenuBar getJmenu() {
		return this.BarraMenu;
	}

	public PopMenu getPopMenu() {
		return popMenu;
	}

	public JTable getTabla() {

		return tabla;
	}

	public ModeloTabla getModelo() {

		return modelo;
	}

	public JButton getBuscar() {
		return buscar;
	}

	public JList getLista() {
		return lista;
	}

	public JTextField getPrecioTotal() {
		return precioTotal;
	}

	public PopUpMenuLista getPopLista() {

		return popLista;

	}

	public JButton getVender() {
		return vender;
	}

	public JScrollPane getScroll() {
		return scroll;
	}

	public DefaultListModel getModelLista() {
		return defaultListModel;
	}

	public void anhadirALalista(Producto p) {
		// TODO
		defaultListModel.addElement(p.getDescripcion());
		listaAVender.add(p);

	}

	public JButton getRefresh() {
		return refresh;
	}

	public JTextField getCarrera() {
		return carrera;
	}

	public JTextField getCod() {
		return cod;
	}

	public JTextField getId() {
		return id;
	}

	public JTextField getNombreApunte() {
		return nombreApunte;
	}

	public void refrescarTabla(){
		
		moduloVentas.refresTabla();
		
	}

	public JTextField getProfesor() {
		return profesor;
	}

	public JPanel getPanelUsuario() {
		return panelUsuario;
	}

	public ModuloVentas getModuloVentas() {
		return moduloVentas;
	}

	public void setModuloVentas(ModuloVentas moduloVentas) {
		this.moduloVentas = moduloVentas;
	}

}
